package com.cr.quartz.task;

import com.alibaba.fastjson2.JSON;
import com.cr.common.utils.StringUtils;
import com.cr.common.utils.http.HttpUtils;
import com.cr.quartz.config.RemoteConfig;
import com.cr.quartz.domain.vo.RemotePageInfo;
import com.cr.quartz.domain.vo.Res;
import com.cr.sync.domain.TbSyncSupervisePerson;
import com.cr.sync.mapper.TbSyncSupervisePersonMapper;
import com.cr.sync.service.ITbSyncSupervisePersonService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.*;

/**
 * 远程同步监管人员任务
 *
 */
@Component("remoteSyncSupervisePersonTask")
public class RemoteSyncSupervisePersonTask {
    private static final Logger log = LoggerFactory.getLogger(RemoteSyncSupervisePersonTask.class);

    private static final String REMOTE_ADDR = "WG_IP/basesupport-service/tripartiteCity/querySupervisePerson";

    @Resource
    private ITbSyncSupervisePersonService tbSyncSupervisePersonService;
    @Resource
    private TbSyncSupervisePersonMapper tbSyncSupervisePersonMapper;

    public void doSync()
    {
        log.info("------------------ 开始执行监管人员数据同步 ----------------------------");
        // 统计开始时间
        long stime = System.currentTimeMillis();
        // 删除所有数据
        tbSyncSupervisePersonMapper.deleteAll();
        // 参数
        Map<String, Object> params = new HashMap<>();
        params.put("userAccount", RemoteConfig.USER_NAME);
        params.put("userPassword", RemoteConfig.PASSWORD);
        params.put("pageNumber", 1);
        params.put("pageSize", 50);

        // 首次请求
        String res = HttpUtils.sendPost(RemoteConfig.REMOTE_URL + REMOTE_ADDR, JSON.toJSONString(params), RemoteConfig.CONTENT_TYPE);
        RemotePageInfo<TbSyncSupervisePerson> pageInfo = getPageInfo(res);
        if(pageInfo != null) {
            getBodyInfos(pageInfo);

            // 获取总页数
            Integer pages = pageInfo.getPages();
            if(pages != null && pages > 1) {
                for (int i = 2; i <= pages; i++) {
                    params.put("pageNumber", i);
                    res = HttpUtils.sendPost(RemoteConfig.REMOTE_URL + REMOTE_ADDR, JSON.toJSONString(params), RemoteConfig.CONTENT_TYPE);
                    getBodyInfos(getPageInfo(res));
                }
            }
        }

        // 统计结束时间
        long etime = System.currentTimeMillis();
        log.info("------------------ 完成监管人员数据同步（耗时："+(etime-stime)+"毫秒） ----------------------------");
    }

    /**
     * 获取分页信息
     * @param res 远程接口返回信息
     */
    private RemotePageInfo<TbSyncSupervisePerson> getPageInfo(String res)
    {
        if(StringUtils.isNotBlank(res)) {
            Res r = JSON.to(Res.class, res);
            if (r.isFlag()) {
                return JSON.to(RemotePageInfo.class, r.getData());
            }
        }
        return null;
    }

    /**
     * 获取数据
     * @param pageInfo 分页信息
     */
    private void getBodyInfos(RemotePageInfo pageInfo)
    {
        List<TbSyncSupervisePerson> infos = Collections.emptyList();

        if(pageInfo != null) {
            List data = pageInfo.getList();
            // 保存第一页的数据
            if(data != null && !data.isEmpty()) {
                infos = new ArrayList<>();
                for (Object datum : data) {
                    TbSyncSupervisePerson info = JSON.to(TbSyncSupervisePerson.class, datum);
                    infos.add(info);
                }
            }
        }

        // 批量添加信息
        tbSyncSupervisePersonService.insertBatch(infos);
    }
}
